home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Toolbox / Visual Basic Toolbox (P.I.E.)(1996).ISO / internet / cswsk110 / telnet.frm < prev    next >
Text File  |  1995-12-07  |  9KB  |  310 lines

  1. VERSION 2.00
  2. Begin Form Form1 
  3.    BorderStyle     =   1  'Fixed Single
  4.    Caption         =   "Telnet"
  5.    ClientHeight    =   4395
  6.    ClientLeft      =   1860
  7.    ClientTop       =   1830
  8.    ClientWidth     =   7080
  9.    FontBold        =   0   'False
  10.    FontItalic      =   0   'False
  11.    FontName        =   "Courier New"
  12.    FontSize        =   8.25
  13.    FontStrikethru  =   0   'False
  14.    FontUnderline   =   0   'False
  15.    Height          =   4800
  16.    Left            =   1800
  17.    LinkTopic       =   "Form1"
  18.    ScaleHeight     =   4395
  19.    ScaleWidth      =   7080
  20.    Top             =   1485
  21.    Width           =   7200
  22.    Begin TextBox PortName 
  23.       Height          =   285
  24.       Left            =   4920
  25.       TabIndex        =   3
  26.       Text            =   "telnet"
  27.       Top             =   360
  28.       Width           =   975
  29.    End
  30.    Begin TextBox Hostname 
  31.       Height          =   285
  32.       Left            =   1080
  33.       TabIndex        =   1
  34.       Top             =   360
  35.       Width           =   2415
  36.    End
  37.    Begin CommandButton Command1 
  38.       Caption         =   "Connect"
  39.       Height          =   375
  40.       Left            =   3000
  41.       TabIndex        =   5
  42.       Top             =   3840
  43.       Width           =   1335
  44.    End
  45.    Begin Socket Socket1 
  46.       Backlog         =   1
  47.       Binary          =   -1  'True
  48.       Blocking        =   -1  'True
  49.       Broadcast       =   0   'False
  50.       BufferSize      =   0
  51.       HostAddress     =   ""
  52.       HostFile        =   ""
  53.       HostName        =   ""
  54.       InLine          =   0   'False
  55.       Interval        =   0
  56.       KeepAlive       =   0   'False
  57.       Left            =   240
  58.       Linger          =   0
  59.       LocalPort       =   0
  60.       LocalService    =   ""
  61.       Peek            =   0   'False
  62.       Protocol        =   0
  63.       RecvLen         =   0
  64.       RemotePort      =   0
  65.       RemoteService   =   ""
  66.       ReuseAddress    =   0   'False
  67.       Route           =   -1  'True
  68.       SendLen         =   0
  69.       TabIndex        =   6
  70.       Timeout         =   0
  71.       Top             =   3840
  72.       Type            =   1
  73.       Urgent          =   0   'False
  74.    End
  75.    Begin TextBox TextBox 
  76.       FontBold        =   0   'False
  77.       FontItalic      =   0   'False
  78.       FontName        =   "Courier New"
  79.       FontSize        =   8.25
  80.       FontStrikethru  =   0   'False
  81.       FontUnderline   =   0   'False
  82.       Height          =   2655
  83.       Left            =   120
  84.       MultiLine       =   -1  'True
  85.       ScrollBars      =   3  'Both
  86.       TabIndex        =   4
  87.       Top             =   960
  88.       Width           =   6735
  89.    End
  90.    Begin Label Label2 
  91.       AutoSize        =   -1  'True
  92.       BackStyle       =   0  'Transparent
  93.       Caption         =   "&Port:"
  94.       Height          =   195
  95.       Left            =   4320
  96.       TabIndex        =   2
  97.       Top             =   360
  98.       Width           =   420
  99.    End
  100.    Begin Label Label1 
  101.       AutoSize        =   -1  'True
  102.       BackStyle       =   0  'Transparent
  103.       Caption         =   "&Hostname:"
  104.       Height          =   195
  105.       Left            =   120
  106.       TabIndex        =   0
  107.       Top             =   360
  108.       Width           =   915
  109.    End
  110. End
  111. Option Explicit
  112.  
  113. Const TELCMD_IAC = 255
  114. Const TELCMD_DONT = 254
  115. Const TELCMD_DO = 253
  116. Const TELCMD_WONT = 252
  117. Const TELCMD_WILL = 251
  118. Const TELCMD_SB = 250
  119. Const TELCMD_NOP = 241
  120. Const TELCMD_SE = 240
  121.  
  122. Const TELOPT_BINARY = 0
  123. Const TELOPT_ECHO = 1
  124. Const TELOPT_TTYPE = 24
  125.  
  126. Const TELQUAL_IS = 0
  127. Const TELQUAL_SEND = 1
  128.  
  129. Sub Command1_Click ()
  130.     If Socket1.Connected Then
  131.     Command1.Enabled = False
  132.     Socket1.Shutdown = 1
  133.     Else
  134.     HostName.Text = Trim$(HostName.Text)
  135.     PortName.Text = Trim$(PortName.Text)
  136.  
  137.     If Len(HostName.Text) = 0 Then
  138.         MsgBox "No host name specified"
  139.         HostName.SetFocus
  140.         Exit Sub
  141.     End If
  142.  
  143.     Socket1.AddressFamily = AF_INET
  144.     Socket1.Protocol = IPPROTO_TCP
  145.     Socket1.Type = SOCK_STREAM
  146.     Socket1.LocalPort = IPPORT_ANY
  147.     Socket1.RemotePort = IPPORT_TELNET
  148.     Socket1.Binary = True
  149.     Socket1.BufferSize = 1024
  150.     Socket1.Blocking = False
  151.  
  152.     On Error Resume Next
  153.     Screen.MousePointer = 11 ' Hourglass
  154.     Command1.Enabled = False
  155.  
  156.     Socket1.HostName = HostName.Text
  157.     If Err <> 0 Then
  158.         Screen.MousePointer = 0 'Default
  159.         Command1.Enabled = True
  160.         HostName.SetFocus
  161.         Exit Sub
  162.     End If
  163.  
  164.     If Len(PortName.Text) > 0 Then
  165.         Socket1.RemoteService = PortName.Text
  166.         If Err <> 0 Then
  167.         Screen.MousePointer = 0 'Default
  168.         Command1.Enabled = True
  169.         PortName.SetFocus
  170.         Exit Sub
  171.         End If
  172.     End If
  173.  
  174.     Socket1.Action = SOCKET_CONNECT
  175.     Screen.MousePointer = 0 ' Default
  176.     End If
  177. End Sub
  178.  
  179. Sub Form_Load ()
  180.     TextBox.Enabled = False: Command1.Default = True
  181. End Sub
  182.  
  183. Sub Form_Unload (Cancel As Integer)
  184.     If Socket1.Connected Then Socket1.Action = SOCKET_CLOSE
  185.     End
  186. End Sub
  187.  
  188. Sub Socket1_Close ()
  189.     Socket1.Action = SOCKET_CLOSE
  190.     Form1.Caption = "Telnet"
  191.     TextBox.Text = ""
  192.     TextBox.Enabled = False
  193.     Command1.Caption = "Connect"
  194.     Command1.Enabled = True
  195.     Command1.Default = True
  196. End Sub
  197.  
  198. Sub Socket1_Connect ()
  199.     Screen.MousePointer = 0 ' Normal
  200.     Command1.Caption = "Disconnect"
  201.     Command1.Enabled = True
  202.     Command1.Default = False
  203.     TextBox.Enabled = True
  204.     TextBox.SetFocus
  205.     If Len(Socket1.PeerName) > 0 Then Form1.Caption = Socket1.PeerName
  206. End Sub
  207.  
  208. Sub Socket1_Error (ErrCode As Integer, ErrMsg As String, Response As Integer)
  209.     MsgBox ErrMsg, 48, Form1.Caption
  210. End Sub
  211.  
  212. Sub Socket1_Read (DataLength As Integer, IsUrgent As Integer)
  213.     Dim sBuffer As String, sOutput As String, sReply As String
  214.     Dim nRead As Integer, nIndex As Integer, nChar As Integer
  215.     Dim nCmd As Integer, nOpt As Integer, nQual As Integer
  216.  
  217.     Socket1.RecvLen = DataLength
  218.     sBuffer = Socket1.RecvData: nRead = Socket1.RecvLen
  219.  
  220.     nIndex = 1
  221.     While nIndex <= nRead
  222.     nChar = Asc(Mid$(sBuffer, nIndex, 1))
  223.     '
  224.     ' If this is the Telnet IAC (Is A Command) character, then
  225.     ' the next byte is the command
  226.     '
  227.     If nChar = TELCMD_IAC Then
  228.         nIndex = nIndex + 1: nCmd = Asc(Mid$(sBuffer, nIndex, 1))
  229.         Select Case nCmd
  230.         '
  231.         ' Two IAC bytes means that this isn't really a command
  232.         '
  233.         Case TELCMD_IAC
  234.         sOutput = sOutput + Chr$(nChar)
  235.         '
  236.         ' The SB (sub-option) command tells us that the server
  237.         ' wants to negotiate. In this case, the only sub-option
  238.         ' that we will deal with is the terminal type
  239.         '
  240.         Case TELCMD_SB
  241.         nIndex = nIndex + 1: nOpt = Asc(Mid$(sBuffer, nIndex, 1))
  242.         nIndex = nIndex + 1: nQual = Asc(Mid$(sBuffer, nIndex, 1))
  243.         If nOpt = TELOPT_TTYPE Then
  244.             '
  245.             ' Build a sub-option reply string and send it to
  246.             ' the server. In this case, we're saying that we are
  247.             ' a DEC VT100 terminal
  248.             '
  249.             sReply = Chr$(TELCMD_IAC) + Chr$(TELCMD_SB) + Chr$(nOpt) + Chr$(TELQUAL_IS) + "DEC-VT100" + Chr$(TELCMD_IAC) + Chr$(TELCMD_SE)
  250.             Socket1.SendLen = Len(sReply): Socket1.SendData = sReply
  251.         End If
  252.         '
  253.         ' The DO, DONT, WILL and WONT commands are sent by the server
  254.         ' to tell us what it is capable (or not capable) of, and the
  255.         ' options that it would like us to use; the next byte is the
  256.         ' option code
  257.         '
  258.         Case TELCMD_DO, TELCMD_DONT, TELCMD_WILL, TELCMD_WONT
  259.         nIndex = nIndex + 1: nOpt = Asc(Mid$(sBuffer, nIndex, 1))
  260.         Select Case nOpt
  261.         '
  262.         ' The only options that we'll deal with is binary mode,
  263.         ' echo and terminal type
  264.         '
  265.         Case TELOPT_BINARY, TELOPT_ECHO, TELOPT_TTYPE
  266.             If nCmd = TELCMD_DO Then
  267.             sReply = Chr$(TELCMD_IAC) + Chr$(TELCMD_WILL) + Chr$(nOpt)
  268.             Socket1.SendLen = 3: Socket1.SendData = sReply
  269.             ElseIf nCmd = TELCMD_WILL Then
  270.             sReply = Chr$(TELCMD_IAC) + Chr$(TELCMD_DO) + Chr$(nOpt)
  271.             Socket1.SendLen = 3: Socket1.SendData = sReply
  272.             End If
  273.         '
  274.         ' For anything else, tell the server that we wont
  275.         ' support it, or don't want the server to
  276.         '
  277.         Case Else
  278.             If nCmd = TELCMD_DO Then
  279.             sReply = Chr$(TELCMD_IAC) + Chr$(TELCMD_WONT) + Chr$(nOpt)
  280.             Socket1.SendLen = 3: Socket1.SendData = sReply
  281.             ElseIf nCmd = TELCMD_WILL Then
  282.             sReply = Chr$(TELCMD_IAC) + Chr$(TELCMD_DONT) + Chr$(nOpt)
  283.             Socket1.SendLen = 3: Socket1.SendData = sReply
  284.             End If
  285.         End Select
  286.         End Select
  287.     Else
  288.         sOutput = sOutput + Chr$(nChar)
  289.     End If
  290.     nIndex = nIndex + 1
  291.     Wend
  292.  
  293.     '
  294.     ' Append the output to the edit control
  295.     '
  296.     If Len(sOutput) > 0 Then
  297.     TextBox.SelStart = 65535: TextBox.SelLength = 0
  298.     TextBox.SelText = sOutput
  299.     End If
  300. End Sub
  301.  
  302. Sub TextBox_KeyPress (KeyAscii As Integer)
  303.     If Socket1.Connected Then
  304.     If KeyAscii = 13 Then KeyAscii = 10
  305.     Socket1.SendLen = 1: Socket1.SendData = Chr$(KeyAscii)
  306.     End If
  307.     KeyAscii = 0
  308. End Sub
  309.  
  310.